package vap

import "context"

// ClientInstruct 客户端指令
type ClientInstruct struct {
	ClientType string `json:"clientType,omitempty"` // 客户端类型
	Code       int    `json:"code,omitempty"`
	ServeTime  int64  `json:"serveTime"`
	Body       string `json:"body,omitempty"`
}

// PluginInstruct 插件指令， 和 PluginConfig 很相识，但是用途不一样，具体情况后续要考虑插件重复执行等等场景，后面再说。现在分开
type PluginInstruct struct {
	Cmd             string   `json:"cmd" yaml:"cmd"`
	Args            []string `json:"args" yaml:"args"`
	User            string   `json:"user" yaml:"user"`
	Env             []string `json:"env" yaml:"env"`
	TimeoutDuration int64    `json:"timeoutDuration" yaml:"timeoutDuration"` // 执行超时时间
}

// PluginPipeInstruct pip插件指令
type PluginPipeInstruct struct {
	Cmd       string   `json:"cmd" yaml:"cmd"`
	Args      []string `json:"args" yaml:"args"`
	User      string   `json:"user" yaml:"user"`
	Env       []string `json:"env" yaml:"env"`
	OutChan   chan string
	CloseChan chan error
	Cancel    context.Context
}

// ClientResponse 客户端响应结构体
type ClientResponse struct {
	DeviceId   int64        `json:"deviceId,string"`
	ClientType string       `json:"clientType"`
	ClientTime int64        `json:"clientTime,string"`
	Timely     int          `json:"timely,omitempty"`
	Content    PluginResult `json:"content,omitempty"` //消息内容
}

// PluginResult 插件执行结果
type PluginResult struct {
	Plugin           string   `json:"plugin,omitempty"`
	Args             []string `json:"args" yaml:"args"`
	InstructSendTime int64    `json:"instructSendTime,string"`
	ElapsedTime      int64    `json:"elapsed_time,string"`
	Result           string   `json:"result,omitempty"`
}

type PluginConfig struct {
	Cmd             string   `json:"cmd" yaml:"cmd"`
	Args            []string `json:"args" yaml:"args"`
	User            string   `json:"user" yaml:"user"`
	Env             []string `json:"env" yaml:"env"`
	TimeoutDuration int32    `json:"timeoutDuration" yaml:"timeoutDuration"` // 执行超时时间
}

type PluginPipeConfig struct {
	Cmd       string   `json:"cmd" yaml:"cmd"`
	Args      []string `json:"args" yaml:"args"`
	User      string   `json:"user" yaml:"user"`
	Env       []string `json:"env" yaml:"env"`
	OutChan   chan string
	CloseChan chan error
}

type PingPcLoad struct {
	CPU    float64 `json:"CPU,omitempty"`
	Memory float64 `json:"memory,omitempty"`
}

type CreateWinAccount struct {
	Account string `json:"account,omitempty"`
	Pwd     string `json:"pwd,omitempty"`
}

type WinSessionChangeMsg struct {
	WinSessionId int    `json:"winSessionId,omitempty"` // 会话ID
	Username     string `json:"username,omitempty"`     // win账户
	WtsCode      int    `json:"wtsCode,omitempty"`      // 会话状态变化时的code
	Describe     string `json:"describe,omitempty"`     // code对应的中文含义
}
